package Leetcode.链表;

import Leetcode.ListNode;

/**
 * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 *
 * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
 *
 * 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 *
 * 示例：
 *
 * 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
 * 输出：7 -> 0 -> 8
 * 原因：342 + 465 = 807
 *
 */
public class L2_两数相加 {
    /**
     *  没啥难的，就是要处理 5 + 5 = 10 的这种最后一个是进位的情况
     *  记得指针操作啊！！！！！
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res = new ListNode(-1);//临时赋值，后面删除

        ListNode a = l1, b = l2,tmp= res;
        int has10 = 0;
        while (a != null || b != null){
            int value = has10;
            if(a != null && b!=null){
                value = a.val + b.val + has10;
                a = a.next;
                b = b.next;
            }else if(a != null && b ==null){
                value = a.val + has10;
                a = a.next;
            }else if(a == null && b !=null){
                value = b.val + has10;
                b = b.next;
            }

            if(value >= 10){
                has10 = 1;
                value %=10;
            }else{
                has10 = 0;
            }
            ListNode r = new ListNode(value);
            tmp.next = r;
            tmp = tmp.next;
        }
        if(has10 == 1){
            ListNode r = new ListNode(1);
            tmp.next = r;
        }
        return res.next;
    }
}
